//! 表关系相关

use super::{Meta, Model};

/// 外键
///
/// T: 链接的表Model
///
/// 为了提升sql性能，可不获取实际链接表数据
///
#[derive(Debug)]
pub struct ForeignKey<T: Model> {
    /// 链接的表model
    /// 为了提升sql性能，可不获取实际链接表数据
    pub to: Option<T>,
    /// 链接的字段值
    /// ForeignKey::id则为Author.id的值
    pub id: T::PkType,
}
/// join信息
#[derive(Debug)]
pub struct JoinInfo {
    /// 对应基础表的原始名称
    pub base_table_org_name: String,
    /// 对应基础表
    pub base_table_name: String,
    /// 连接字段信息
    pub base_table_link_field_name:String,
    /// 对应join表的表信息数据
    pub join_table_meta: Meta,
    /// 表sql名称,格式为: 基础表名称_基本表外链字段名称_外链表名称
    pub join_table_name: String,
    /// join连接语句
    pub join_sql: String,
}

/// join的基础表信息
/// 
/// 用于基础表向外链表传递基础表信息，以便被join的下级表生成join语句
#[derive(Debug)]
pub struct JoinBaseTableInfo<'a> {
    /// 对应基础表的原始名称
    pub table_org_name: &'a str,
    /// 对应基础表
    pub table_name: &'a str,
    /// 连接字段信息
    pub link_field_name:&'a str,
    /// 是否为left join
    pub is_left_join:bool,
}